package ai.leinao.notify.core;

import ai.leinao.notify.core.enums.NotifyType;
import ai.leinao.notify.core.template.Template;

import javax.validation.constraints.NotNull;
import java.util.Map;

/**
 * 消息通知器
 * <p>
 *  用于发送消息
 *
 * @author zhong.wang
 * @date 2025/7/7
 */
public interface Notifier<T extends Template> extends Wrapper{
    /**
     * 获取通知器ID
     *
     * @return 通知器ID
     */
    String getNotifyId();

    /**
     * 获取通知器类型
     *
     * @return 通知器类型
     * @see NotifyType
     */
    NotifyType getNotifyType();

    /**
     * 获取通知器供应商
     * @return
     */
    String getProvider();

    /**
     * 指定模板ID发送消息
     * <p>
     *  不同的供应商需实现不同的发送方式
     * <p>
     *
     * @param templateId 模板ID
     * @param context 上下文
     */
    void send(@NotNull String templateId, @NotNull Map<String,Object> context);

    /**
     * 指定模板{@link Template}发送消息
     * <p>
     *  不同的供应商需实现不同的发送方式
     * <p>
     *
     * @param template 模板
     * @param context 上下文
     */
    void send(@NotNull T template, @NotNull Map<String,Object> context);


}
